package com.turbo.leetcode.example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 5键键盘的输出
 * <pre>
 *     【5键键盘的输出】有一个特殊的 5键键盘，上面有 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。
 * a键在屏幕上输出一个字母 a;
 * ctrl-c将当前选择的字母复制到剪贴板;
 * ctrl-x将当前选择的 字母复制到剪贴板，并清空选择的字母;
 * ctrl-v将当前剪贴板里的字母输出到屏幕;
 * ctrl-a 选择当前屏幕上所有字母。
 * 注意:
 * 1、剪贴板初始为空，新的内容被复制到剪贴板时会覆盖原来的内容
 * 2、当屏幕上没有字母时，ctrl-a无效
 * 3、当没有选择字母时，ctrl-c和 ctrl-x无效
 * 4、当有字母被选择时，a和ctrl-v这两个有输出功能的键会先清空选择的字母，再进行输出
 * 给定一系列键盘输入，输出最终屏幕上字母的数量。
 * 输入描述:
 * 输入为一行，为简化解析，用数字 12345代表 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入，数字用空格分隔
 * 输出描述:
 * 输出一个数字，为最终屏目上字母的数量。
 * </pre>
 */
public class FiveKeyOutput {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = br.readLine()) != null) {
            String[] input = str.split(" ");
            int count = 0;// 字母的数量
            int checkedCount = 0;// 选中的字母数量
            int copyCount = 0;// 已复制的字母数量
            for (String s : input) {
                int order = Integer.parseInt(s); // 用数字 12345代表 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入
                switch (order) {
                    case 1: // 输出a
                        count++;
                        break;
                    case 2: // ctrl-c将当前选择的字母复制到剪贴板
                        copyCount = checkedCount;
                        break;
                    case 3: // ctrl-x将当前选择的 字母复制到剪贴板，并清空选择的字母
                        copyCount = checkedCount;
                        count -= checkedCount;
                        checkedCount = 0;
                        break;
                    case 4: // ctrl-v将当前剪贴板里的字母输出到屏幕
                        if (copyCount != 0) {
                            count += copyCount;
                            checkedCount = 0;
                        }
                        break;
                    case 5: // ctrl-a选择当前屏幕上所有字母
                        checkedCount = count;
                        break;
                }
            }
            System.out.println(count);
        }
    }
}

